#include <iostream>

class MyClass {
private:
    int data;

public:
    MyClass(int value) : data(value) {}

    // 返回常量的成员函数
    const int& getValueReference() const {
        // 返回常量引用，外部不能修改引用的值
        return data;
    }

    int& getValueReference() {
        // 返回非常量引用，外部可以修改引用的值
        return data;
    }
};

int main() {
    const MyClass obj1(10); // 创建一个 const 对象
    MyClass obj2(20);

    // 调用返回常量引用的 const 成员函数
    const int& ref1 = obj1.getValueReference(); // 可以调用，不允许修改值
    // obj1.getValueReference() = 30; // 错误，不能通过常量引用修改值
    obj2.getValueReference() = 40;

    // 调用返回非常量引用的非 const 成员函数
    std::cout << obj2.getValueReference() << std::endl;
    int& ref2 = obj2.getValueReference(); // 可以调用，允许修改值
    
    ref2 = 30; // 可以修改值
    std::cout << obj2.getValueReference() << std::endl;
    return 0;
}
